# 数据库连接
import opr_mysql_database
import config
import json

db = opr_mysql_database.MySQLDatabase(config.db_server)
db.connect()


def replace_str(json_str):
    # 去除多余的'''字符和将多行字符串转换为单行字符串
    json_str = json_str.replace("```", '').replace('\n', '').replace(' ', '').replace("json", "")

    # 尝试解析JSON字符串
    try:
        # 使用json.loads()函数解析JSON字符串
        parsed_json = json.loads(json_str)
        return json.dumps(parsed_json, ensure_ascii=False, indent=4)
    except json.JSONDecodeError as e:
        print(f"Error parsing JSON: {e}")


def remove_blank_lines(text):
    lines = text.split('\n')
    non_blank_lines = [line for line in lines if line.strip() != '']
    return '\n'.join(non_blank_lines)


def read_by_glm3turbo(page_text: object) -> str:
    from zhipuai import ZhipuAI
    import time
    client = ZhipuAI(api_key="9437fabb27c28a7b438fc30de753e2e0.R01Dwo5tBzFMiUVm")
    composite_prompt = """
    根据以下信息，回答以下问题：
    {page_text}
    提取以下字段
    标题、
    招标地省（输出省全称，如湖北=湖北省）、
    招标地市（输出市全称，如北京=北京市）、
    招标区（所在行政区一级、或县一级）、
    招标类型、
    发布时间、
    招标编号、
    招标单位、
    招标单位联系人、
    招标代理机构、
    招标代理机构联系人、
    中标单位、
    中标单位联系人（输出电话号码即可）、
    报名截止时间、
    投标截止时间、
    招标估价、
    中标金额（单位：万元）、
    评审专家、
    项目正文（限制输出如果文本内容太长，总结为1500字的文本）
    等信息
    (用JSON格式返回回答内容，其中json的key必须是上面提到的字段信息不允许输出上面未提到的字段信息)
    """.format(page_text=page_text)
    start_time = time.time()
    response = client.chat.completions.create(
        model="glm-3-turbo",  # 填写需要调用的模型名称
        temperature=0.5,
        max_tokens=2000,
        messages=[
            {"role": "system", "content": "你是一个文本解析高手，你的任务是为用户提供高效快速的文本解析服务。并以json格式返回解析内容"},
            {"role": "user", "content": remove_blank_lines(composite_prompt)},
        ],
        stream=False,
    )
    end_time = time.time()
    invoke_time = end_time - start_time
    print("耗时：" + str(invoke_time) + "秒")
    return response.choices[0].message.content


# 选择excel读取指定行内容
from openpyxl import load_workbook

wb = load_workbook(filename='C:\\Users\\83451\\Desktop\\数据源表\\标讯314-1.xlsx')
# 加载现有的Excel文件
sheet_names = wb.sheetnames
# 从第二张工作表开始遍历
for sheet_name in sheet_names[1:]:  # 从索引1开始，跳过第一张工作表
    ws = wb[sheet_name]  # 选择当前工作表
    cell_value = []  # 获取整个sheet页内容
    for row in ws.iter_rows(values_only=True):
        row_content = []
        for cell in row:
            if cell is not None:
                row_content.append(str(cell))
        cell_value.append(row_content)

    db_row = read_by_glm3turbo(cell_value)
    print(db_row)
    json_obj = json.loads(replace_str(db_row))
    print(json_obj["标题"])
    data = {
        'project_name': json_obj['标题'],
        'company': json_obj['招标单位'],
        'area': json_obj['招标地省'],
        'city': json_obj['招标地市'],
        'district': None if json_obj['招标区'] == "" else json_obj['招标区'],
        'bid_type': json_obj['招标类型'],
        'procurement_method': '',
        'budget': json_obj['招标估价'],
        'item_code': json_obj['招标编号'],
        'supplier_qualification': '',
        'bidder_qualification': '',
        'biding_agency': json_obj['招标代理机构'],
        'expiration_date': None if json_obj['投标截止时间'] == "" else json_obj['投标截止时间'],
        'declaration_date': None if json_obj['发布时间'] == "" else json_obj['发布时间'],
        'contact_info': json_obj['招标代理机构联系人'],
        'tel_info': json_obj['招标单位联系人'],
        'agent_service_fee': '',
        'source_type': 1,
        'bidding_org': json_obj['中标单位'],
        'bidding_tel': json_obj['中标单位联系人'],
        'bid_amount': json_obj['中标金额'],
        'content': json_obj['项目正文'],
        'assessment_experts': json_obj['评审专家'],
    }

    db.insert('bid_source_data', data)

wb.close()
# 将读取的指定行内容作为输入，访问LLM,返回结构化json数据
db.close()

# 将json数据转换成数据库字段写入Mysql
